home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 26 / AMIGAplus Sonderheft 26 (2000)(Falke)(DE)(Track 1 of 2)[!].iso / Tools / Packer / PPCUnACE / Src / uac_sys.c < prev    next >
C/C++ Source or Header  |  1999-03-29  |  3KB  |  125 lines

  1. /* ------------------------------------------------------------------------ */
  2. /*                                                                          */
  3. /*      Some basic things.                                                  */
  4. /*                                                                          */
  5. /* ------------------------------------------------------------------------ */
  6.  
  7. #include "os.h"
  8.  
  9. #include <signal.h>  // signal()
  10. #include <stdio.h>   // fprintf() fflush() getch() putc()
  11.  
  12. #if defined(DOS) || defined(WINNT) || defined(WIN16) || defined (VA_CPP)
  13.  #include <conio.h>  // getch()
  14. #endif
  15. #if defined(DOS)
  16.  #include <dos.h>    // delay() sound()
  17. #endif
  18.  
  19. #ifdef NOSTRICMP
  20.  #include <ctype.h>  // tolower()
  21. #endif
  22.  
  23. #include "globals.h"
  24. #include "uac_sys.h"
  25.  
  26.  
  27. void memset16(USHORT * dest, SHORT val, INT len)  // fills short-array with
  28. {                                                 // value
  29.    while (len--)
  30.       *(dest++) = val;
  31. }
  32.  
  33. INT  cancel(void)               // checks whether to interrupt the program
  34. {
  35. #ifdef DOS
  36.    while (kbhit())
  37.    {
  38.       if (getch() == 27)
  39.          f_err = ERR_USER;
  40.    }
  41. #endif
  42.    return (f_err);
  43. }
  44.  
  45. INT  wrask(CHAR * s)            // prompt-routine
  46. {
  47.    INT  ch;
  48.  
  49.    fprintf(stderr, "\n %s (Yes,Always,No,Cancel) ", s);
  50.    fflush(stderr);
  51.    do
  52.    {
  53.       ch = getch();
  54.       ch = upcase(ch);
  55.    }
  56.    while (ch != 'Y' && ch != 'A' && ch != 'N' && ch != 'C' && ch != 27)
  57.       ;
  58.    fprintf(stderr, "%s", ch == 'Y' ? "Yes" : (ch == 'A' ? "Always" : (ch == 'N' ? "No" : "Cancel")));
  59.    fflush(stderr);
  60.    return (ch == 'Y' ? 0 : (ch == 'A' ? 1 : (ch == 'N' ? 2 : 3)));
  61. }
  62.  
  63. #ifdef NOSTRICMP
  64. INT stricmp( char *arg1, char *arg2 )
  65. {
  66.    INT chk;
  67.  
  68.    if ( (!arg2) || (!arg1) )
  69.       return 1;
  70.    for ( ; *arg1 || *arg2; arg1++, arg2++ )
  71.       if ( (chk = tolower(*arg1) - tolower(*arg2)) )
  72.          if ( chk < 0 ) 
  73.             return -1;
  74.          else 
  75.             return 1;
  76.    return 0;
  77. }
  78. #endif /* NOSTRICMP */
  79.  
  80. void beep(void)                           // makes some noise
  81. {
  82. #ifdef DOS
  83.    sound(800);
  84.    delay(250);
  85.    nosound();
  86. #else
  87.    putc(0x07, stdout);
  88. #endif
  89. }
  90.  
  91. void my_signalhandler(INT sig_number)     // sets f_err if ctrl+c or ctrl+brk
  92. {
  93.    f_err = ERR_USER;
  94.    printf("\nUser break\n");
  95. }
  96.  
  97. #ifdef DOS                                // handles hardware errors
  98. #ifdef __BORLANDC__
  99. INT harderrhandler(UINT deverr, UINT errc, UINT * devhdr)
  100. #else
  101. INT __far harderrhandler(UINT deverr, UINT errc, UINT __far * devhdr)
  102. #endif
  103. {
  104.    f_criterr = 'A' + deverr & 0xff;
  105.    f_err = ERR_OTHER;
  106.    return (0x3);
  107. }
  108. #endif
  109.  
  110. void set_handler(void)                    // initializes handlers
  111. {
  112. #if defined(DOS) && !defined(__BORLANDC__)
  113.    signal(SIGBREAK, my_signalhandler);    // set ctrl-break/-c handlers
  114. #endif
  115.    signal(SIGINT, my_signalhandler);
  116. #if defined(DOS) && !defined(__CONSOLE__) // set hardware error handler
  117. #ifdef __BORLANDC__
  118.    harderr(harderrhandler);
  119. #else
  120.    _harderr(harderrhandler);
  121. #endif
  122. #endif
  123. }
  124.  
  125.